/*
 * Project Name sprint-boot-tools
 * File Name SubmitRespMsg
 * Package Name com.huxiaosu.tools.cmpp.model.action
 * Create Time 2024/5/7
 * Create by name：liujie
 */
package com.huxiaosu.tools.cmpp.model.action;

import com.huxiaosu.tools.cmpp.model.MessageHeader;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;

/**
 * Description
 *
 * @author liujie
 * @date 2024/5/7 17:15
 */
@Slf4j
@Data
public class SubmitRespMsg extends MessageHeader {

    /**
     * 信息标识，生成算法如下： 采用 64 位（8 字节）的整数： （1）时间（格式为 MMDDHHMMSS，即 月日时分秒）：bit64~bit39，其中
     * bit64~bit61：月份的二进制表示； bit60~bit56：日的二进制表示； bit55~bit51：小时的二进制表示；
     * bit50~bit45：分的二进制表示； bit44~bit39：秒的二进制表示； （2）短信网关代码：bit38~bit17，把短信 网关的代码转换为整数填写到该字
     * 段中。 （3）序列号：bit16~bit1，顺序增加，步 长为 1，循环使用。 各部分如不能填满，左补零，右对齐。 （SP 根据请求和应答消息的
     * Sequence_Id 一致性就可得到 CMPP_Submit 消息的 Msg_Id）
     */
    private long msgId;

    /**
     * 结果 0：正确 1：消息结构错 2：命令字错 3：消息序号重复 4：消息长度错 5：资费代码错 6：超过最大信息长 7：业务代码错 8：流量控制错
     * 9：本网关不负责服务此计费号码 10：Src_Id错误 11：Msg_src错误 12：Fee_terminal_Id错误 13：Dest_terminal_Id错误
     */
    private int result;

    public byte[] toByte() {
        ByteArrayOutputStream bous = new ByteArrayOutputStream();
        DataOutputStream dous = new DataOutputStream(bous);
        try {
            dous.writeInt(this.getTotalLength());
            dous.writeInt(this.getCommandId());
            dous.writeInt(this.getSequenceId());
            dous.writeLong(this.msgId);
            dous.writeInt(this.result);
            dous.close();
        }
        catch (IOException e) {
            log.error("submit response error {}", e.getMessage());
        }
        return bous.toByteArray();
    }

}